package dev

import (
	"errors"
	"fmt"
	"github.com/google/uuid"
	"gorm.io/gorm"
)

func CreateUser(db *gorm.DB, user UserConfig) (*UserConfig, error) {
	// 检查用户名是否已存在
	var existingUser UserConfig
	if err := db.Where("username = ?", user.Username).First(&existingUser).Error; err == nil {
		// 如果找到匹配的用户，返回错误，表示用户名已存在
		return nil, err
	} else if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) {
		// 如果查询过程中出现了其他错误，返回错误
		return nil, fmt.Errorf("failed to check username: %w", err)
	}

	var maxPort int
	if err := db.Model(&UserConfig{}).Select("MAX(server_port)").Scan(&maxPort).Error; err != nil {
		//return nil, fmt.Errorf("查询失败")
		maxPort = 8388
	}
	nameUid, err := uuid.NewUUID()
	if err != nil {
		return nil, err
	}
	user.Username = user.Username + nameUid.String()
	user.ServerPort = maxPort + 1

	// 如果用户名不存在，则创建用户
	if err := db.Debug().Create(&user).Error; err != nil {
		return nil, err
	}
	return &user, nil
}

func GetUserByUserId(db *gorm.DB, userId string) (UserConfig, error) {
	// 根据用户名查询用户
	var user UserConfig
	err := db.Model(UserConfig{}).Debug().Where("id = ?", userId).First(&user).Error
	return user, err
}

// GetAllUser 获取全部用户信息
func GetAllUser(db *gorm.DB) ([]UserConfig, error) {
	var users []UserConfig
	err := db.Model(UserConfig{}).Debug().Find(&users).Error
	if err != nil {
		return nil, err
	}
	return users, nil
}
func updateUser(db *gorm.DB, user *UserConfig) error {
	// 更新用户信息
	return db.Save(&user).Error
}
